home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / asm-generic / termios.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  70 lines

  1. /* termios.h: generic termios/termio user copying/translation
  2.  */
  3.  
  4. #ifndef _ASM_GENERIC_TERMIOS_H
  5. #define _ASM_GENERIC_TERMIOS_H
  6.  
  7. #include <asm/uaccess.h>
  8.  
  9. #ifndef __ARCH_TERMIO_GETPUT
  10.  
  11. /*
  12.  * Translate a "termio" structure into a "termios". Ugh.
  13.  */
  14. static inline int user_termio_to_kernel_termios(struct termios *termios,
  15.                         struct termio __user *termio)
  16. {
  17.     unsigned short tmp;
  18.  
  19.     if (get_user(tmp, &termio->c_iflag) < 0)
  20.         goto fault;
  21.     termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
  22.  
  23.     if (get_user(tmp, &termio->c_oflag) < 0)
  24.         goto fault;
  25.     termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
  26.  
  27.     if (get_user(tmp, &termio->c_cflag) < 0)
  28.         goto fault;
  29.     termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
  30.  
  31.     if (get_user(tmp, &termio->c_lflag) < 0)
  32.         goto fault;
  33.     termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
  34.  
  35.     if (get_user(termios->c_line, &termio->c_line) < 0)
  36.         goto fault;
  37.  
  38.     if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
  39.         goto fault;
  40.  
  41.     return 0;
  42.  
  43.  fault:
  44.     return -EFAULT;
  45. }
  46.  
  47. /*
  48.  * Translate a "termios" structure into a "termio". Ugh.
  49.  */
  50. static inline int kernel_termios_to_user_termio(struct termio __user *termio,
  51.                         struct termios *termios)
  52. {
  53.     if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
  54.         put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
  55.         put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
  56.         put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
  57.         put_user(termios->c_line,  &termio->c_line) < 0 ||
  58.         copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
  59.         return -EFAULT;
  60.  
  61.     return 0;
  62. }
  63.  
  64. #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
  65. #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
  66.  
  67. #endif    /* __ARCH_TERMIO_GETPUT */
  68.  
  69. #endif /* _ASM_GENERIC_TERMIOS_H */
  70.